#ifndef _STORE_H
#define _STORE_H

#include "buffer.h"
#include "store/chunk.h"

/**
 * 一个进程只会打开一个存储块。
 * 一个进程同时只能执行读操作或者写操作。
 **/

//apis for app programmer
extern int chunk_initial(struct store_chunk *chunk,char *file);
extern int chunk_release(struct store_chunk *chunk);
/**
 * return 0  同步正常
 * return -1 写入文件出错，存储块写入偏移量回到上一个偏移处
 */
extern int forc_sync(struct store_chunk *chunk);

extern int save_key(struct buffer *buff_in,void *key,size_t key_len,struct store_chunk *chunk);

extern int query_key(struct buffer *buff_out,void *key,size_t key_len,struct store_chunk *chunk);

extern int take_key(struct buffer *buff_out,void *key,size_t key_len,struct store_chunk *chunk);

/**
 * 流风格的存取API。所谓流风格就是所有数据按顺序读写。IO指针只可向前，不可向后。
 */
/**
 * return 0 OK
 * return -1 err
 * return 1 cache has not free position
 **/
extern int save_stream(struct buffer *buff_in,struct store_chunk *chunk);
extern int query_stream(struct buffer **buff_out,struct store_chunk *chunk);

#endif
